package Code;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

public class CodeGenerator {

    public static void main(String[] args) {
        // 1. 配置数据库连接信息
        String url = "jdbc:mysql://localhost:3306/ftdb?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8";
        String username = "root"; // 你的 MySQL 用户名
        String password = "123456"; // 你的 MySQL 密码

        // 2. 快速生成器配置（链式调用）
        FastAutoGenerator.create(url, username, password)
                // -------------------------- 全局配置 --------------------------
                .globalConfig(builder -> {
                    builder.author("cgc") // 作者名（生成文件的注释中显示）
                            .outputDir(System.getProperty("user.dir") + "/src/main/java") // 代码输出目录（项目的 src/main/java）
                            .commentDate("yyyy-MM-dd") // 注释日期格式
                            .enableSwagger() // 开启 Swagger 注解（需引入 Swagger 依赖，可选）
                            .disableOpenDir(); // 生成后不自动打开文件夹（可选）
                })

                // -------------------------- 包配置（核心：指定代码存放的包路径） --------------------------
                .packageConfig(builder -> {
                    builder.parent("com.example.foodsy") // 父包名（根据你的项目实际包名修改）
                            .entity("entity") // Entity 类包名（默认 entity，可自定义）
                            .mapper("mapper") // Mapper 接口包名（默认 mapper，可自定义）
                            .service("service") // Service 接口包名（默认 service，可自定义）
                            .serviceImpl("service.impl") // Service 实现类包名（默认 service.impl，可自定义）
                            .controller("controller") // Controller 类包名（默认 controller，可自定义）
                            .xml("mapper.xml") // Mapper XML 文件包名（默认 mapper/xml，这里改为 mapper.xml）
                            // 指定 Mapper XML 文件的输出路径（resources 目录下）
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    System.getProperty("user.dir") + "/src/main/resources/mapper/xml"));
                })

                // -------------------------- 策略配置（表规则、字段规则） --------------------------
                .strategyConfig(builder -> {
                    builder.addInclude("admin,city,company_info,farm_info,province,reta_info,slau_info,whol_info") // 要生成代码的表名（多个表用逗号分隔："user,order,product"

                            // ---------- Entity 策略配置 ----------
                            .entityBuilder()
                            .enableLombok() // 开启 Lombok 注解（减少 getter/setter，需引入 Lombok 依赖）
                            .enableTableFieldAnnotation() // 为 Entity 字段添加 @TableField 注解

                            // ---------- Mapper 策略配置 ----------
                            .mapperBuilder()
                            .enableBaseResultMap() // 开启 BaseResultMap（XML 中生成通用结果映射）
                            .enableBaseColumnList() // 开启 BaseColumnList（XML 中生成通用查询列）

                            // ---------- Service 策略配置 ----------
                            .serviceBuilder()
                            .formatServiceFileName("%sService") // Service 接口名格式（默认 %sService，如 UserService）
                            .formatServiceImplFileName("%sServiceImpl") // Service 实现类名格式（默认 %sServiceImpl）

                            // ---------- Controller 策略配置 ----------
                            .controllerBuilder()
                            .enableRestStyle() // 开启 RestController 风格（生成 @RestController 而非 @Controller）
                            .enableHyphenStyle(); // URL 路径用连字符（如 /user-info 而非 /userInfo，可选）
                })

                // -------------------------- 模板引擎配置（使用 Freemarker） --------------------------
                .templateEngine(new FreemarkerTemplateEngine())

                // -------------------------- 执行生成 --------------------------
                .execute();
    }
}